<?php
require_once("GrupoEletivas.php");

class Catalogo {
    
    public $codigo;
    public $nomeCurso;
    public $obrigatorias;
    public $gruposEletivas;
    
    public function __construct($xmlCatalogo, $modalidadeAluno=null){
        $attributes = $xmlCatalogo->attributes();
        
        $this->codigo = (string)$attributes['cod'];
        $this->nomeCurso = (string)$attributes['nome'];
        
        $xmlDisciplinas = $xmlCatalogo->disciplinas;
        
        $this->obrigatorias = array();
        
        foreach($xmlDisciplinas->disciplina as $xmlDisciplina){
            $Disciplina = new Disciplina($xmlDisciplina);
            $this->obrigatorias[] = $Disciplina;
        }
        
        $this->gruposEletivas = array();
        
        if(isset($xmlCatalogo->gruposEletivas)){
            $gruposEletivas = $xmlCatalogo->gruposEletivas;

            foreach($gruposEletivas->grupoEletivas as $grupos){
                
                $this->gruposEletivas[] = new GrupoEletivas($grupos);
            }
        }
        
        if(isset($xmlCatalogo->modalidades)){
            $modalidades = $xmlCatalogo->modalidades;
            
            foreach($modalidades->modalidade as $modalidade){
                $atributosModalidade = $modalidade->attributes();
                if($modalidadeAluno == null || substr((string)$atributosModalidade['nome'], 0, 2) == $modalidadeAluno){
                    if(isset($modalidade->disciplinas)){
                        $disciplinas = $modalidade->disciplinas;
                        
                        foreach($disciplinas->disciplina as $disciplina){
                            $this->obrigatorias[] = new Disciplina($disciplina);
                        }    
                    }
                    
                    if(isset($modalidade->gruposEletivas)){
                        $gruposEletivas = $modalidade->gruposEletivas;
            
                        foreach($gruposEletivas->grupoEletivas as $grupos){
                            
                            $this->gruposEletivas[] = new GrupoEletivas($grupos);
                        }
                    }
                }
            }
        }
    }
          
    public function toJson(){
        $obrigatorias = array();
        $totalCreditos = 0;
        
        foreach($this->obrigatorias as $obrigatoria){
            $obrigatorias[] = json_decode($obrigatoria->toJson());
            $totalCreditos += $obrigatoria->credito;
        }
        
        $obrigatoriasJson = array(
            'subjects' => $obrigatorias,
            'credits' => $totalCreditos
        );
        
        $gruposEletivasJson = array();
        
        foreach($this->gruposEletivas as $grupo){
            $gruposEletivasJson[] = json_decode($grupo->toJson());
        }
        
        $json = array(
            'mandatorySubjects' => $obrigatoriasJson,
            'electiveGroups' => $gruposEletivasJson
        );
        
        return json_encode($json);
    }
}